package com.pureland.common.constants;


/**
 * @projectName: pureland_cloud
 * @className: com.pureland.common.constants.RegExConstants
 * @description: 正则表达式常量类,该类封装了常见的正则表达式常量
 * @author: tong.li
 * @createTime: 2020/9/26 18:25
 * @version: v1.0
 * @copyright: 版权所有 李彤 © 2020
 */
public class RegExConstants {

    /**
     * 小思考:
     *   interface常量默认修饰符都是public static final,写起来更为简洁。
     *   那我们为什么还要将常量封装在class中,封装在interface中不香吗?
     * 解答:
     *   https://developer.ibm.com/zh/articles/l-java-interface/
     */

    /**
     * email正则表达式
     */
    public static final String REGEX_EMAIL = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";

    /**
     * 国内车牌号正则表达式
     */
    public static final String REGEX_LICENSE_PLATE_NUMBER = "^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领]{1}[A-Z]{1}[A-Z0-9]{5}$";

    /**
     * 国内11位手机号正则表达式
     * -----------------------------------------------------------------------------------------------------------------------------
     * 中国电信号段
     *      133、153、173、177、180、181、189、190、191、193、199
     * 中国联通号段
     *      130、131、132、145、155、156、166、167、171、175、176、185、186、196
     * 中国移动号段
     *      134(0-8)、135、136、137、138、139、1440、147、148、150、151、152、157、158、159、172、178、182、183、184、187、188、195 、197、198
     * 中国广电号段
     *      192
     * 其他号段
     *      14号段部分为上网卡专属号段：中国联通145，中国移动147，中国电信149.
     * 虚拟运营商：
     *      电信：1700、1701、1702、162
     *      移动：1703、1705、1706、165
     *      联通：1704、1707、1708、1709、171、167
     *      卫星通信：1349、174
     *      物联网：140、141、144、146、148
     * -------------------------------------------------------------------------------------------------------------------------------
     *  以上数据截止到2020-08-10,最新的数据请参考:https://baike.baidu.com/item/%E6%89%8B%E6%9C%BA%E5%8F%B7%E7%A0%81/1417348?fr=aladdin
     */
    public static final String REGEX_MOBILE = "^((13[0-9])|(14[0,1,4-9])|(15[0-3,5-9])|(16[2,5,6,7])|(17[0-8])|(18[0-9])|(19[0-3,5-9]))\\d{8}$";



    /**
     * 18位身份证正则表达式
     */
    public static final String REGEX_ID_CARD_NO = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";


    /**
     * Ipv4正则表达式
     */
    public static final String REGEX_IP = "^((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}$";


    /**
     * 帐号正则表达式:字母开头,5-16字符以内,允许字母数字下划线
     */
    public static final String REGEX_ACCOUNT = "^[a-zA-Z][a-zA-Z0-9_]{4,15}$";

    /**
     * 普通密码正则表达式:字母开头,长度在6~18之间,只能包含字母、数字和下划线
     */
    public static final String REGEX_NORMARL_PASSWORD = "^[a-zA-Z]\\w{5,17}$";

    /**
     * 普通密码正则表达式:必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-18之间
     */
    public static final String REGEX_STRONG_PASSWORD = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,18}$";

    /**
     * 正则表达式：验证汉字
     */
    public static final String REGEX_CHINESE = "^[\u4e00-\u9fa5],{0,}$";

    /**
     * 正则表达式：验证URL
     */
    public static final String REGEX_URL = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?";


}
